home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1990-11-04 | 5.1 KB | 141 lines |
- DEFINITION MODULE KbdCtrl;
-
- (*
- * Thomas Tempelmann 28.08.88
- * Stand 04.22.90
- *
- * Die Funktionen dieses Moduls bieten Zugriff auf den Tastaturpuffer.
- * Sie können auch in Interruptroutinen aufgerufen werden.
- *
- * VORSICHT:
- * Die Funktionen, die direkt auf den Tastaturpuffer zugreifen, verhindern
- * nicht, daß währenddessen gerade ein neues Zeichen im Interrupt eingefügt
- * wird. Werden die Funktionen im Tastatur-Interrupt aufgerufen, macht
- * das natürlich nichts, weil währenddessen kein weiterer Interrupt auf-
- * treten kann. Erfolt der Aufruf aber aus dem User-Modus bzw. im normal
- * laufenden Programm, müssen währenddessen die Interrupts gesperrt werden.
- * Das ist beispielsweise durch ein "Monitor-Modul" (Priorität im Modulkopf,
- * muß mind. 5 sein!) oder durch die Funktion 'LockKeyBuffer' (s.u.) möglich.
- *
- * Damit bei den Tastenabfragen über die hiesigen Funktionen oder auch
- * über die BIOS/GEMDOS-Funktionen im oberen Wort neben dem Scan-Code
- * auch der Status der Shift-, Ctrl- und Alt- Tasten übermittelt wird,
- * wird Bit 3 der Systemvariable 'conterm' (bei Adr. $484) automatisch
- * bei der Initialisierung dieses Modul von seinem Körper (Body) gesetzt.
- * Bei Prozeßende des (ältesten) importierenden Moduls oder Freigabe eines
- * importierenden residenten Moduls/Programms wird der alte Wert in 'conterm'
- * wiederhergestellt.
- * Der alte Wert wird in der globalen Variablen 'PreviousMode' gerettet
- * und kann ggf. verändert werden, um damit eine andere Rückstellung des
- * Wertes bei Programmende/-freigabe zu bewirken.
- * Zwischendurch kann der 'conterm'-Wert auch mit der Funktion 'SetMode'
- * verändert werden.
- *)
-
- FROM MOSGlobals IMPORT Key, CtrlKey, CtrlSet;
- FROM SYSTEM IMPORT ADDRESS;
-
-
- VAR PreviousMode: BOOLEAN;
- (*
- * Enthält den Wert des 'conterm'-Bits (Nr.3) vor dem Start dieses
- * Moduls.
- * Der Wert dieser Variablen wird bei Programmende/-freigabe wieder
- * nach 'conterm' geschrieben.
- *)
-
- PROCEDURE CurrentMode (): BOOLEAN;
- PROCEDURE SetMode (extended: BOOLEAN);
- PROCEDURE SetExtMode (VAR lastMode: BOOLEAN);
- (*
- * 'CurrentMode' liefert den aktuellen Status des Bit 3 aus 'conterm',
- * 'SetMode' setzt oder löscht das Bit, je nach dem übergebenen
- * BOOLEAN-Wert.
- * 'SetExtMode' setzt das Bit und liefert in 'lastMode' den vorherigen
- * Wert, sodaß dieser danach mit 'SetMode (lastMode)' zurückgesetzt
- * werden kann (dies ist eine optimierte Funktion, um kurzzeitig das Bit
- * zu setzen und danach wiederherzustellen).
- * VORSICHT: Diese drei Prozeduren nicht in Interrupt-Routinen aufrufen!
- *)
-
-
- PROCEDURE LookKey ( VAR k: Key; VAR ok: BOOLEAN );
- (*
- * Liefert die als nächste anstehende Taste (also die älteste im
- * Puffer), ohne sie aus dem Puffer zu entfernen.
- * Wenn 'ok' = FALSE, ist keine Taste vorhanden.
- *)
-
- PROCEDURE GetKey ( VAR k: Key; VAR ok: BOOLEAN );
- (*
- * Holt die als nächste anstehende (die älteste) Taste aus dem Puffer.
- * Wenn 'ok' = FALSE, ist keine Taste vorhanden.
- *)
-
- PROCEDURE LookMostRecentKey ( VAR k: Key; VAR ok: BOOLEAN );
- (*
- * Liefert die zuletzt eingefügte Taste (also die jüngste im
- * Puffer), ohne sie aus dem Puffer zu entfernen.
- * Wenn 'ok' = FALSE, ist keine Taste vorhanden.
- *)
-
- PROCEDURE PushBackKey ( VAR k: Key; VAR ok: BOOLEAN );
- (*
- * Schreibt die Taste so in den Puffer zurück, daß sie als
- * nächste Taste wieder ausgelesen wird.
- * Wenn 'ok' = FALSE, ist der Puffer voll.
- *)
-
- PROCEDURE PutKey ( VAR k: Key; VAR ok: BOOLEAN );
- (*
- * Fügt die Taste in Puffer hinten an, so, als ob die Taste
- * gedrückt worden wäre.
- * Wenn 'ok' = FALSE, ist der Puffer voll.
- *)
-
- PROCEDURE ClrKeyBuffer;
- (*
- * Löscht die anstehenden Tasten im Puffer.
- *)
-
- PROCEDURE KeysAvail (): CARDINAL;
- (*
- * Liefert Anzahl der vorhandenen Tasten im Puffer
- *)
-
- PROCEDURE KeyBufferSize (): CARDINAL;
- (*
- * Liefert Fassungsvermögen des Puffers.
- *)
-
- VAR KbdRec: ADDRESS;
- (*
- * Zeigt auf den verwendeten Tastaturpuffer-Descriptor des BIOS.
- * Wird von diesem Modul automatisch initialisiert, kann jedoch
- * bei Bedarf verändert werden.
- *)
-
-
- (*
- * Die folgenden beiden Funktionen erlauben es, mehrere Tasten mittels
- * 'PutKey' oder 'PushBackKey' nacheinander in den Puffer zu schreiben,
- * ohne daß Tastendrücke von der Tastatur dazwischengeraten können.
- * Dazu werden alle Interrupts gesperrt.
- * Bei ihrer Verwendung ist unbedingt darauf zu achten, daß nach dem Aufruf
- * von 'LockKeyBuffer' und dem Einfügen der Tasten wieder 'UnlockKeyBuffer'
- * aufgerufen wird. Auch sollte die Zeit zwischen den beiden Aufrufen so
- * kurz wie möglich gehalten werden.
- *)
-
- PROCEDURE LockKeyBuffer ( VAR hdl: LONGCARD );
- (*
- * Sperrt die Interrupts bis einschl. Level 6. Dabei wird in 'hdl'
- * ein Wert zurückgegeben, der beim Aufruf von 'UnlockKeyBuffer'
- * wieder übergeben werden muß.
- *)
-
- PROCEDURE UnlockKeyBuffer ( hdl: LONGCARD );
- (* Gibt die Interrupts wieder frei *)
-
- END KbdCtrl.
-